#pragma once

#include "common.h"


class TestReflection : public ProtobufTest
{
public:
	virtual void Test();

private:
	void PackToBin(std::string& bin);
	void UnpackFromBin(const std::string& bin);
	void ReflectionField();
	void ReflectionMessageFromCC(const std::string& typeName, const std::string& bin);
	void ReflectionMessageFromProtoFile(
		const std::string& typeName, const std::string& fileName, const std::string& bin);

	void ShowDescriptor(const std::string& bin);
	void ShowMessageOptions(const google::protobuf::Descriptor* descriptor);
	void ShowFileDescriptor(const google::protobuf::Descriptor* descriptor);
	void ShowFields(const google::protobuf::Descriptor* descriptor);

	void ShowReflection(const std::string& bin);
};